package com.dsbj.icardservice.utils.strprocess;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.List;

/**
 * 返回的消息体。
 *
 * @author cjw 2019-07-29
 */
public class RespStruct {
	
	private int code; //状态码 (0 错误; 1 成功;)
	private boolean success; //状态boolean (false 错误; true 成功;)
	private String msg; //提示信息
	private int total; //data中的记录总数
	private Object data; //数据集合
	private Object data_add; //附加的数据集合
	
	
	/**
	 * 构造函数。默认赋值成功信息。
	 * code=1,success=true,msg="请求成功!",total=0,this.data=null,this.data_add=null。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-07-29
	 */
	public RespStruct() {
		code = 1;
		success = true;
		msg = "请求成功!";
		total = 0;
		data = null;
		data_add = null;
	}
	
	/**
	 * 构造函数。默认赋值成功信息。
	 * code=1,success=true,msg="请求成功!",this.data=data,this.data_add=null。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-07-29
	 */
	public RespStruct(Object data) {
		code = 1;
		success = true;
		msg = "请求成功!";
		this.data = data;
		this.data_add = null;
		
		// 分情况给total赋值
		if (data == null) {
			total = 0;
		} else {
			total = 1;
			if (data instanceof List<?>) {
				total = ((List<?>) data).size();
			}
		}
	}
	
	
	/************** 返回RespStruct信息体 ********************/
	
	/**
	 * 返回成功消息体。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-07-29
	 */
	public RespStruct success() {
		return this;
	}
	
	/**
	 * 返回成功消息体。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-07-29
	 */
	public RespStruct success(Object data) {
		this.setData(data);
		return this;
	}
	
	/**
	 * 返回错误消息体。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-07-29
	 */
	public RespStruct error() {
		this.setCode(0);
		this.setSuccess(false);
		this.setMsg("请求失败!");
		this.setData(null);
		this.setData_add(null);
		return this;
	}
	
	/**
	 * 返回错误消息体。可接收String,Exception类型的错误消息提示。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-07-29
	 */
	public RespStruct error(Object errMsg) {
		this.setCode(0);
		this.setSuccess(false);
		this.setMsg(StrUtil.isEmpty(errMsg) ? "请求失败!" : errMsg.toString());
		this.setData(null);
		this.setData_add(null);
		return this;
	}
	
	/**
	 * 返回错误消息体。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-07-29
	 */
	public RespStruct error(Object errMsg, Object errData) {
		this.setCode(0);
		this.setSuccess(false);
		this.setMsg(StrUtil.isEmpty(errMsg) ? "请求失败!" : errMsg.toString());
		this.setData(errData);
		this.setData_add(null);
		return this;
	}
	
	
	public int getCode() {
		return code;
	}
	
	public void setCode(int code) {
		this.code = code;
	}
	
	public boolean isSuccess() {
		return success;
	}
	
	public void setSuccess(boolean success) {
		this.success = success;
	}
	
	public String getMsg() {
		return msg;
	}
	
	public void setMsg(String msg) {
		this.msg = msg;
	}
	
	public Object getData() {
		return data;
	}
	
	/**
	 * 给data赋值，并根据data信息给total赋值。
	 *
	 * @param
	 * @return
	 * @author cjw 2019-09-16
	 */
	public void setData(Object data) {
		this.data = data;
		// 分情况给total赋值
		if (data == null) {
			total = 0;
		} else {
			total = 1;
			if (data instanceof List<?>) {
				total = ((List<?>) data).size();
			}
		}
	}
	
	public int getTotal() {
		return total;
	}
	
	public void setTotal(int total) {
		this.total = total;
	}
	
	public Object getData_add() {
		return data_add;
	}
	
	public void setData_add(Object data_add) {
		this.data_add = data_add;
	}
	
	
	@Override
	public String toString() {
		return JSON.toJSONString(this, SerializerFeature.WriteMapNullValue);
	}
	
}
